import data from '../model/XdxzData.js';
import {
    createAGroupFolder,
    isGroupExist,
    isPlayerExist,
    storagePlayerData,
    getPlayerData,
    Write_player
} from '../model/function.js';

export class xdxz_yule extends plugin {
    constructor() {
        super({
            name: '[xdxz]娱乐设施',
            dsc: '星动小镇各种娱乐设施',
            event: 'message',
            priority: 9999999999,
            rule: [
                { 
                    reg: /^#?去网吧$/,
                    fnc: 'gowb'
                },
                { 
                    reg: /^#?去游泳$/,
                    fnc: 'goyy'
                },
                { 
                    reg: /^#?回宿舍$/,
                    fnc: 'goss'
                }
            ]
        })
    }
    async gowb(e) {
        //不开放私聊功能
		if (!e.isGroup) {
			return e.reply(['该游戏只能在群内使用']);
		}
        const ID = [e.user_id, e.group_id];
        // 检查群组和玩家是否存在，不存在则创建
        if (!isGroupExist(ID[0])) {
            createAGroupFolder(ID[1]);
        }
        if (!isPlayerExist(ID[1], ID[0])) {
            storagePlayerData(ID[1], ID[0], { 
                xingbi: 250,
                article: [],
                value: 100,
                spouse: '',
                tili:100,
                jingli:100,
                jinengdian: 0,
                jineng: ''
                });
        }
        //读取网吧随机事件json文件
        const wb_list = data.wb_list;
        // 随机选择一个对象
        const randomIndex = Math.floor(Math.random() * wb_list.length);
        const randomActivity = wb_list[randomIndex];
        const classs = randomActivity.class;
        const tl = randomActivity.消耗体力;
        const jl = randomActivity.消耗精力;
        const jnd = randomActivity.技能点;
        const desc = randomActivity.desc;
        const sc = randomActivity.时长;
        const name= randomActivity.name;
        //读取用户json文件
        let player = await getPlayerData(ID[1], ID[0]);
        player.tili-= tl;
        player.jingli-=jl;
        player.jinengdian+=jnd;
        if(player.tili<0){
            e.reply(`抱歉！您的体力不够5点，请先恢复！再前往`,true);
            return;
        }else if(player.jingli<0){
            e.reply(`抱歉！您的精力不够5点，请先恢复！再前往`,true);
            return;
        };
        await Write_player(ID[1], ID[0], player);
        const msg = `你在网吧中玩【${name}】\r`+`由于${desc},获得【${jnd}】点技能点\r欢迎下次再来！`;
        e.reply(msg,true);
        return;
    }
    async goyy(e) {
        //不开放私聊功能
		if (!e.isGroup) {
			return e.reply(['该游戏只能在群内使用']);
		}
        const ID = [e.user_id, e.group_id];
        // 检查群组和玩家是否存在，不存在则创建
        if (!isGroupExist(ID[0])) {
            createAGroupFolder(ID[1]);
        }
        if (!isPlayerExist(ID[1], ID[0])) {
            storagePlayerData(ID[1], ID[0], { 
                xingbi: 250,
                article: [],
                value: 100,
                spouse: '',
                tili:100,
                jingli:100,
                jinengdian: 0,
                jineng: ''
                });
        }
        //读取游泳随机事件json文件
        const yy_list = data.yy_list;
        // 随机选择一个对象
        const randomIndex = Math.floor(Math.random() * yy_list.length);
        const randomActivity = yy_list[randomIndex];
        const classs = randomActivity.class;
        const tl = randomActivity.消耗体力;
        const jl = randomActivity.消耗精力;
        const jnd = randomActivity.技能点;
        const desc = randomActivity.desc;
        const sc = randomActivity.时长;
        const name= randomActivity.name;
        //读取用户json文件
        let player = await getPlayerData(ID[1], ID[0]);
        player.tili-= tl;
        player.jingli-=jl;
        player.jinengdian+=jnd;
        if(player.tili<0){
            e.reply(`抱歉！您的体力不够5点，请先恢复！再前往`,true);
            return;
        }else if(player.jingli<0){
            e.reply(`抱歉！您的精力不够5点，请先恢复！再前往`,true);
            return;
        };
        await Write_player(ID[1], ID[0], player);
        const msg = `你在【${name}】时\r`+`${desc},获得【${jnd}】点技能点！`;
        e.reply(msg,true);
        return;
    }
    async goss(e) {
        //不开放私聊功能
		if (!e.isGroup) {
			return e.reply(['该游戏只能在群内使用']);
		}
        const ID = [e.user_id, e.group_id];
        //判断用户是否存在
        if (!isPlayerExist(ID[1], ID[0])) {
            e.reply(`失败了！小镇里还没你的档案(请先#加入小镇)`,true);
            return;
        }
        // 解析用户JSON 数据
        let player = await getPlayerData(ID[1], ID[0]);
        const date_timet = new Date().getTime();//获取今天服务器时间
        const user_qq =ID[0];//账号
        let date_time2 = await redis.get(`Yunzai:xdxzgoss${user_qq}_date_timet`);date_time2 = JSON.parse(date_time2); //获取用户上一次回宿舍时间
        const timecha = date_timet-date_time2;
        //判断回宿舍CD
        if(timecha<3600000){
            e.reply('距离上次回宿舍还没够一个小时哦！',true);
            return;
        };
        if(player.tili<=80 && player.jingli<=80){
            player.tili+=20;
            player.jingli+=20;
            await Write_player(ID[1], ID[0], player);
            e.reply('在宿舍躺了一小时，成功恢复20点体力和20点精力',true);
            redis.set(`Yunzai:xdxzgoss${user_qq}_date_timet`, JSON.stringify(date_timet));//储存日期
            return;
        }else if(player.tili<80 && player.jingli>=81){
            player.tili+=20;
            await Write_player(ID[1], ID[0], player);
            e.reply('在宿舍躺了一小时，由于还有精力，只恢复了20点体力',true);
            redis.set(`Yunzai:xdxzgoss${user_qq}_date_timet`, JSON.stringify(date_timet));//储存日期
            return;
        }else if(player.tili>=81 && player.jingli<80){
            player.jingli+=20;
            await Write_player(ID[1], ID[0], player);
            e.reply('在宿舍躺了一小时，由于还有体力，只恢复了20点精力',true);
            redis.set(`Yunzai:xdxzgoss${user_qq}_date_timet`, JSON.stringify(date_timet));//储存日期
            return;
        }else if(player.tili>=81 && player.jingli>=81){
            e.reply('你还有那么多体力和精力，就不要回宿舍了吧',true);
            console.log('当前时间为:', date_timet);
            console.log('存储的时间为:', date_time2);
            return;
        };
    }
}